There are two major sets of tools for creating plots in R, namely the base and ggplot2 facilities. Base graphics come with all R installations, while ggplot2 is a stand-alone package. Note that other plotting facilities do exist (notably lattice), but base and ggplot2 are by far the most popular.
For the following examples, we will use a dataset taken from Fair (1977) in Econometrica, entitled “A note on the computation of the tobit estimator”. Improbably, this dataset contains information on extramarital affairs.
library(Ecdat)
Loading required package: Ecfun
Warning: package 'Ecfun' was built under R version 3.1.2
Warning: replacing previous import by 'stringi::%<%' when loading 'Ecfun'
Warning: replacing previous import by 'stringi::%<=%' when loading 'Ecfun'
Attaching package: 'Ecdat'
The following object is masked from 'package:datasets':
Orange
data(Fair)
ema<-Fair
head(ema)
sex age ym child religious education occupation rate nbaffairs
1 male 37 10.00 no 3 18 7 4 0
2 female 27 4.00 no 4 14 6 4 0
3 female 32 15.00 yes 1 12 1 4 0
4 male 57 15.00 yes 5 18 6 5 0
5 male 22 0.75 no 2 17 6 3 0
6 female 32 1.50 no 2 17 5 5 0
str(ema)
'data.frame': 601 obs. of 9 variables:
$ sex : Factor w/ 2 levels "female","male": 2 1 1 2 2 1 1 2 1 2 ...
$ age : num 37 27 32 57 22 32 22 57 32 22 ...
$ ym : num 10 4 15 15 0.75 1.5 0.75 15 15 1.5 ...
$ child : Factor w/ 2 levels "no","yes": 1 1 2 2 1 1 1 2 2 1 ...
$ religious : int 3 4 1 5 2 2 2 2 4 4 ...
$ education : num 18 14 12 18 17 17 12 14 16 14 ...
$ occupation: int 7 6 1 6 6 5 1 4 1 4 ...
$ rate : int 4 4 4 5 3 5 3 4 2 5 ...
$ nbaffairs : num 0 0 0 0 0 0 0 0 0 0 ...
library(plyr)
ema<-ddply(.data = ema, .variables = "age", .fun = transform, avg.nbaffairs=mean(nbaffairs, na.rm=T))
plot(x=)
# Note that when asked to plot a single vector, R will assume the index positions of each vector element are the implied horizontal dimension
plot(x = ema$age)
plot(x=, y=)
plot(x = ema$age, y = ema$avg.nbaffairs)
plot(x=ema$age, y=ema$avg.nbaffairs, type="p")
* “l” – line graphs
# Note that "line" does not create a smoothing line, just connected points
plot(x=ema$age, y=ema$avg.nbaffairs, type="l")
* “b” – both line and point plots
plot(x=ema$age, y=ema$avg.nbaffairs, type="b")
hist(x=ema$age)
hist(x=ema$age, breaks=5)
hist(x=ema$age, breaks=10)
* Ex) Density plots
age.density<-density(x=ema$age, na.rm=T) # Create a density object (NOTE: be sure to remove missing values)
class(age.density) # Check the class of the object
[1] "density"
age.density # View the contents of the object
Call:
density.default(x = ema$age, na.rm = T)
Data: ema$age (601 obs.); Bandwidth 'bw' = 1.868
x y
Min. :11.90 Min. :2.406e-05
1st Qu.:24.57 1st Qu.:6.520e-03
Median :37.25 Median :1.226e-02
Mean :37.25 Mean :1.970e-02
3rd Qu.:49.93 3rd Qu.:3.485e-02
Max. :62.60 Max. :5.663e-02
plot(x=age.density) # Plot the density object
plot(x=density(x=ema$age, bw=.5, na.rm=T)) # Plot the density object, bandwidth of 0.5
plot(x=density(x=ema$age, bw=2, na.rm=T)) # Plot the density object, bandwidth of 2
plot(x=density(x=ema$age, bw=6, na.rm=T)) # Plot the density object, bandwidth of 6
plot(x=, y=, type="", xlab="", ylab="", main="")
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", xlab="Age (Years)", ylab="Number of Affairs (per 12 months)", main="Annual Extramarital Affairs by Age") # Add labels for axes and overall plot
plot(x=, y=, type="", xlim=, ylim=, cex=)
plot(x=ema$age, y=ema$avg.nbaffairs, type="p") # Create a basic plot
# Limit the ages (x-axis) to between 20 and 40
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", xlim = c(20,40))
# Limit the ages (x-axis) to between 20 and 40, increase point size to 2
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", xlim = c(20,40), cex=2)
# Limit the ages (x-axis) to between 20 and 40, decrease point size to 0.5
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", xlim = c(20,40), cex=0.5)
plot(x=, y=, type="", col="", pch=, lty=, lwd=)
colors() # View all elements of the color vector
[1] "white" "aliceblue" "antiquewhite"
[4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
[7] "antiquewhite4" "aquamarine" "aquamarine1"
[10] "aquamarine2" "aquamarine3" "aquamarine4"
[13] "azure" "azure1" "azure2"
[16] "azure3" "azure4" "beige"
[19] "bisque" "bisque1" "bisque2"
[22] "bisque3" "bisque4" "black"
[25] "blanchedalmond" "blue" "blue1"
[28] "blue2" "blue3" "blue4"
[31] "blueviolet" "brown" "brown1"
[34] "brown2" "brown3" "brown4"
[37] "burlywood" "burlywood1" "burlywood2"
[40] "burlywood3" "burlywood4" "cadetblue"
[43] "cadetblue1" "cadetblue2" "cadetblue3"
[46] "cadetblue4" "chartreuse" "chartreuse1"
[49] "chartreuse2" "chartreuse3" "chartreuse4"
[52] "chocolate" "chocolate1" "chocolate2"
[55] "chocolate3" "chocolate4" "coral"
[58] "coral1" "coral2" "coral3"
[61] "coral4" "cornflowerblue" "cornsilk"
[64] "cornsilk1" "cornsilk2" "cornsilk3"
[67] "cornsilk4" "cyan" "cyan1"
[70] "cyan2" "cyan3" "cyan4"
[73] "darkblue" "darkcyan" "darkgoldenrod"
[76] "darkgoldenrod1" "darkgoldenrod2" "darkgoldenrod3"
[79] "darkgoldenrod4" "darkgray" "darkgreen"
[82] "darkgrey" "darkkhaki" "darkmagenta"
[85] "darkolivegreen" "darkolivegreen1" "darkolivegreen2"
[88] "darkolivegreen3" "darkolivegreen4" "darkorange"
[91] "darkorange1" "darkorange2" "darkorange3"
[94] "darkorange4" "darkorchid" "darkorchid1"
[97] "darkorchid2" "darkorchid3" "darkorchid4"
[100] "darkred" "darksalmon" "darkseagreen"
[103] "darkseagreen1" "darkseagreen2" "darkseagreen3"
[106] "darkseagreen4" "darkslateblue" "darkslategray"
[109] "darkslategray1" "darkslategray2" "darkslategray3"
[112] "darkslategray4" "darkslategrey" "darkturquoise"
[115] "darkviolet" "deeppink" "deeppink1"
[118] "deeppink2" "deeppink3" "deeppink4"
[121] "deepskyblue" "deepskyblue1" "deepskyblue2"
[124] "deepskyblue3" "deepskyblue4" "dimgray"
[127] "dimgrey" "dodgerblue" "dodgerblue1"
[130] "dodgerblue2" "dodgerblue3" "dodgerblue4"
[133] "firebrick" "firebrick1" "firebrick2"
[136] "firebrick3" "firebrick4" "floralwhite"
[139] "forestgreen" "gainsboro" "ghostwhite"
[142] "gold" "gold1" "gold2"
[145] "gold3" "gold4" "goldenrod"
[148] "goldenrod1" "goldenrod2" "goldenrod3"
[151] "goldenrod4" "gray" "gray0"
[154] "gray1" "gray2" "gray3"
[157] "gray4" "gray5" "gray6"
[160] "gray7" "gray8" "gray9"
[163] "gray10" "gray11" "gray12"
[166] "gray13" "gray14" "gray15"
[169] "gray16" "gray17" "gray18"
[172] "gray19" "gray20" "gray21"
[175] "gray22" "gray23" "gray24"
[178] "gray25" "gray26" "gray27"
[181] "gray28" "gray29" "gray30"
[184] "gray31" "gray32" "gray33"
[187] "gray34" "gray35" "gray36"
[190] "gray37" "gray38" "gray39"
[193] "gray40" "gray41" "gray42"
[196] "gray43" "gray44" "gray45"
[199] "gray46" "gray47" "gray48"
[202] "gray49" "gray50" "gray51"
[205] "gray52" "gray53" "gray54"
[208] "gray55" "gray56" "gray57"
[211] "gray58" "gray59" "gray60"
[214] "gray61" "gray62" "gray63"
[217] "gray64" "gray65" "gray66"
[220] "gray67" "gray68" "gray69"
[223] "gray70" "gray71" "gray72"
[226] "gray73" "gray74" "gray75"
[229] "gray76" "gray77" "gray78"
[232] "gray79" "gray80" "gray81"
[235] "gray82" "gray83" "gray84"
[238] "gray85" "gray86" "gray87"
[241] "gray88" "gray89" "gray90"
[244] "gray91" "gray92" "gray93"
[247] "gray94" "gray95" "gray96"
[250] "gray97" "gray98" "gray99"
[253] "gray100" "green" "green1"
[256] "green2" "green3" "green4"
[259] "greenyellow" "grey" "grey0"
[262] "grey1" "grey2" "grey3"
[265] "grey4" "grey5" "grey6"
[268] "grey7" "grey8" "grey9"
[271] "grey10" "grey11" "grey12"
[274] "grey13" "grey14" "grey15"
[277] "grey16" "grey17" "grey18"
[280] "grey19" "grey20" "grey21"
[283] "grey22" "grey23" "grey24"
[286] "grey25" "grey26" "grey27"
[289] "grey28" "grey29" "grey30"
[292] "grey31" "grey32" "grey33"
[295] "grey34" "grey35" "grey36"
[298] "grey37" "grey38" "grey39"
[301] "grey40" "grey41" "grey42"
[304] "grey43" "grey44" "grey45"
[307] "grey46" "grey47" "grey48"
[310] "grey49" "grey50" "grey51"
[313] "grey52" "grey53" "grey54"
[316] "grey55" "grey56" "grey57"
[319] "grey58" "grey59" "grey60"
[322] "grey61" "grey62" "grey63"
[325] "grey64" "grey65" "grey66"
[328] "grey67" "grey68" "grey69"
[331] "grey70" "grey71" "grey72"
[334] "grey73" "grey74" "grey75"
[337] "grey76" "grey77" "grey78"
[340] "grey79" "grey80" "grey81"
[343] "grey82" "grey83" "grey84"
[346] "grey85" "grey86" "grey87"
[349] "grey88" "grey89" "grey90"
[352] "grey91" "grey92" "grey93"
[355] "grey94" "grey95" "grey96"
[358] "grey97" "grey98" "grey99"
[361] "grey100" "honeydew" "honeydew1"
[364] "honeydew2" "honeydew3" "honeydew4"
[367] "hotpink" "hotpink1" "hotpink2"
[370] "hotpink3" "hotpink4" "indianred"
[373] "indianred1" "indianred2" "indianred3"
[376] "indianred4" "ivory" "ivory1"
[379] "ivory2" "ivory3" "ivory4"
[382] "khaki" "khaki1" "khaki2"
[385] "khaki3" "khaki4" "lavender"
[388] "lavenderblush" "lavenderblush1" "lavenderblush2"
[391] "lavenderblush3" "lavenderblush4" "lawngreen"
[394] "lemonchiffon" "lemonchiffon1" "lemonchiffon2"
[397] "lemonchiffon3" "lemonchiffon4" "lightblue"
[400] "lightblue1" "lightblue2" "lightblue3"
[403] "lightblue4" "lightcoral" "lightcyan"
[406] "lightcyan1" "lightcyan2" "lightcyan3"
[409] "lightcyan4" "lightgoldenrod" "lightgoldenrod1"
[412] "lightgoldenrod2" "lightgoldenrod3" "lightgoldenrod4"
[415] "lightgoldenrodyellow" "lightgray" "lightgreen"
[418] "lightgrey" "lightpink" "lightpink1"
[421] "lightpink2" "lightpink3" "lightpink4"
[424] "lightsalmon" "lightsalmon1" "lightsalmon2"
[427] "lightsalmon3" "lightsalmon4" "lightseagreen"
[430] "lightskyblue" "lightskyblue1" "lightskyblue2"
[433] "lightskyblue3" "lightskyblue4" "lightslateblue"
[436] "lightslategray" "lightslategrey" "lightsteelblue"
[439] "lightsteelblue1" "lightsteelblue2" "lightsteelblue3"
[442] "lightsteelblue4" "lightyellow" "lightyellow1"
[445] "lightyellow2" "lightyellow3" "lightyellow4"
[448] "limegreen" "linen" "magenta"
[451] "magenta1" "magenta2" "magenta3"
[454] "magenta4" "maroon" "maroon1"
[457] "maroon2" "maroon3" "maroon4"
[460] "mediumaquamarine" "mediumblue" "mediumorchid"
[463] "mediumorchid1" "mediumorchid2" "mediumorchid3"
[466] "mediumorchid4" "mediumpurple" "mediumpurple1"
[469] "mediumpurple2" "mediumpurple3" "mediumpurple4"
[472] "mediumseagreen" "mediumslateblue" "mediumspringgreen"
[475] "mediumturquoise" "mediumvioletred" "midnightblue"
[478] "mintcream" "mistyrose" "mistyrose1"
[481] "mistyrose2" "mistyrose3" "mistyrose4"
[484] "moccasin" "navajowhite" "navajowhite1"
[487] "navajowhite2" "navajowhite3" "navajowhite4"
[490] "navy" "navyblue" "oldlace"
[493] "olivedrab" "olivedrab1" "olivedrab2"
[496] "olivedrab3" "olivedrab4" "orange"
[499] "orange1" "orange2" "orange3"
[502] "orange4" "orangered" "orangered1"
[505] "orangered2" "orangered3" "orangered4"
[508] "orchid" "orchid1" "orchid2"
[511] "orchid3" "orchid4" "palegoldenrod"
[514] "palegreen" "palegreen1" "palegreen2"
[517] "palegreen3" "palegreen4" "paleturquoise"
[520] "paleturquoise1" "paleturquoise2" "paleturquoise3"
[523] "paleturquoise4" "palevioletred" "palevioletred1"
[526] "palevioletred2" "palevioletred3" "palevioletred4"
[529] "papayawhip" "peachpuff" "peachpuff1"
[532] "peachpuff2" "peachpuff3" "peachpuff4"
[535] "peru" "pink" "pink1"
[538] "pink2" "pink3" "pink4"
[541] "plum" "plum1" "plum2"
[544] "plum3" "plum4" "powderblue"
[547] "purple" "purple1" "purple2"
[550] "purple3" "purple4" "red"
[553] "red1" "red2" "red3"
[556] "red4" "rosybrown" "rosybrown1"
[559] "rosybrown2" "rosybrown3" "rosybrown4"
[562] "royalblue" "royalblue1" "royalblue2"
[565] "royalblue3" "royalblue4" "saddlebrown"
[568] "salmon" "salmon1" "salmon2"
[571] "salmon3" "salmon4" "sandybrown"
[574] "seagreen" "seagreen1" "seagreen2"
[577] "seagreen3" "seagreen4" "seashell"
[580] "seashell1" "seashell2" "seashell3"
[583] "seashell4" "sienna" "sienna1"
[586] "sienna2" "sienna3" "sienna4"
[589] "skyblue" "skyblue1" "skyblue2"
[592] "skyblue3" "skyblue4" "slateblue"
[595] "slateblue1" "slateblue2" "slateblue3"
[598] "slateblue4" "slategray" "slategray1"
[601] "slategray2" "slategray3" "slategray4"
[604] "slategrey" "snow" "snow1"
[607] "snow2" "snow3" "snow4"
[610] "springgreen" "springgreen1" "springgreen2"
[613] "springgreen3" "springgreen4" "steelblue"
[616] "steelblue1" "steelblue2" "steelblue3"
[619] "steelblue4" "tan" "tan1"
[622] "tan2" "tan3" "tan4"
[625] "thistle" "thistle1" "thistle2"
[628] "thistle3" "thistle4" "tomato"
[631] "tomato1" "tomato2" "tomato3"
[634] "tomato4" "turquoise" "turquoise1"
[637] "turquoise2" "turquoise3" "turquoise4"
[640] "violet" "violetred" "violetred1"
[643] "violetred2" "violetred3" "violetred4"
[646] "wheat" "wheat1" "wheat2"
[649] "wheat3" "wheat4" "whitesmoke"
[652] "yellow" "yellow1" "yellow2"
[655] "yellow3" "yellow4" "yellowgreen"
colors()[179] # View specific element of the color vector
[1] "gray26"
Another option: R Color Infographic
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", col=colors()[145]) # or col="gold3"
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", col="seagreen4") # or col=colors()[578]
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", pch=3) # Change point style to crosses
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", pch=15) # Change point style to filled squares
# Change point style to filled squares and increase point size to 3
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", pch=15, cex=3)
plot(x=ema$age, y=ema$avg.nbaffairs, pch="w") # Change point style to "w"
# Change point style to "$" and increase point size to 2
plot(x=ema$age, y=ema$avg.nbaffairs, type="p", pch="$", cex=2)
# Line plot with solid line
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=1)
# Line plot with medium dashed line
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=2)
# Line plot with short dashed line
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=3)
# Change line width to 2
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=3, lwd=2)
# Change line width to 5
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=3, lwd=5)
# Change line width to 10 and use dash-dot
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=4, lwd=10)
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=4, lwd=10)
text(x=25, y=3, labels="Sharp Drop", cex = .75)
plot(x=ema$age, y=ema$avg.nbaffairs, type="l", lty=4, lwd=10)
abline(v=42.5, h=2.25, lty=2)
The general call for ggplot2 takes on one of three forms:
# 1) Aesthetics/options are specified the initial ggplot() layer and will be used by all other layers
ggplot(data=, aes(x=,y=), color=, size=,)+geom_xxxx()+geom_yyyy()
# 2) Aesthetics/options are not specified the initial ggplot() layer, but in other layers
ggplot()+geom_xxxx(data=, aes(x=,y=), color=, size=,)+geom_yyyy(data=, aes(x=,y=), color=, size=,)
# 3) Aesthetics/options are specified partially in the ggplot() layers and partially in other layers
ggplot(data=, aes(x=,y=), color=, size=,)+geom_xxxx()+geom_yyyy(data=, aes(x=,y=), color=, size=,)
In general (but with some exceptions), aesthetics/options specified in the ggplot() layer will override aesthetics/options specified in other layers and will be the source for required argument values not present in those layers.
library(ggplot2)
Attaching package: 'ggplot2'
The following object is masked _by_ '.GlobalEnv':
mpg
ggplot(data=ema, aes(x=age))+geom_density()
ggplot()+geom_density(data=ema, aes(x=age))
ggplot(data=ema)+geom_density(aes(x=age))
ggplot(data=ema, aes(x=age))+geom_line(stat="density") # Trick for removing coverage line
ggplot(data=ema, aes(x=age))+geom_line(stat="density")+theme_bw() # Trick for removing background shading
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point()+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line()+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_bar(stat="identity")+theme_bw()
ggplot(data=ema, aes(x=sex,y = nbaffairs))+geom_boxplot()+theme_bw()
ggplot(data=ema, aes(x=child,y = nbaffairs))+geom_boxplot()+theme_bw()
ggplot(data=ema, aes(x=factor(religious),y = nbaffairs))+geom_boxplot()+theme_bw()
ggplot(data=ema, aes(x=factor(rate),y = nbaffairs))+geom_boxplot()+theme_bw()
ggplot(data=ema, aes(x=factor(rate),y = nbaffairs))+geom_boxplot()+theme_bw()+facet_wrap(facets = ~sex)
ggplot(data=ema, aes(x=sex,y = nbaffairs))+geom_boxplot()+theme_bw()+facet_wrap(facets = ~rate+child)
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line()+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line()+theme_bw()+
xlab("Age (Years)")+ylab("Number of Affairs (per 12 months)")+
ggtitle("Annual Extramarital Affairs by Age")
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point()+theme_bw()+
xlim(20,40)
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(size=.5)+theme_bw()+
xlim(20,40)
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(size=10)+theme_bw()+
xlim(20,40)
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line()+theme_bw()+
xlim(20,40)
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(size=.1)+theme_bw()+
xlim(20,40)
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(size=3)+theme_bw()+
xlim(20,40)
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(color="red")+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(color="seagreen4")+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(shape=3)+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(shape=15)+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_point(shape="@", size=10)+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(linetype=2)+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(linetype=4)+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(linetype=2, size=.5)+theme_bw()
ggplot(data=ema, aes(x=age,y = avg.nbaffairs))+geom_line(linetype=4, size=10)+theme_bw()
ggplot2 tries to represent variation in data by making use of various “aesthetics”. This general approach is based on The Grammar of Graphics, which says that visualizing data requires four elements:
One or more statistics conveying information about the data (identities, means, medians, etc.)
A coordinate system that differentiates between the intersections of statistics (at most two for ggplot, three for lattice)
Geometries that differentiate between off-coordinate variation in kind
Scales that differentiate between off-coordinate variation in degree
All of these elements can be manipulated to display variation in the data via the aes() function.
ggplot(data=, aes(x=, y=, color=, linetype=, shape=, size=))
Normally, specifying options like color="red" or size=10 for a given layer results in its contents being red and quite large. Inside the aes() function, however, these arguments are given entire variables whose values will then be displayed using different realizations of that aesthetic.
# Compute average number of affairs by sex
ema<-ddply(.data = ema, .variables = c("age", "sex"), .fun = transform,
avg.nbaffairs.age.sex=mean(nbaffairs, na.rm=T))
# Differences in kind using color
ggplot(data=ema, aes(x=age, y=avg.nbaffairs.age.sex))+geom_line()+theme_bw()
ggplot(data=ema, aes(x=age, y=avg.nbaffairs.age.sex, color=sex))+geom_line()+theme_bw()
ggplot(data=ema, aes(x=age, y=avg.nbaffairs.age.sex, linetype=sex))+geom_line()+theme_bw()
ggplot(data=ema, aes(x=age, y=avg.nbaffairs.age.sex, shape=sex))+geom_point()+theme_bw()
ggplot(data=ema, aes(x=age, y=religious, color=nbaffairs))+geom_jitter()+theme_bw() # Note the use of the jitter layer
ggplot(data=ema, aes(x=age, y=religious, size=nbaffairs))+geom_jitter()+theme_bw() # Note the use of the jitter layer
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(method="lm")
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(method="loess")
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(method="loess", span=.5)
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(method="loess", span=.99)
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth()
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(se=F)
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(se=F, color="red")
ggplot(data=ema, aes(x=age, y=nbaffairs))+geom_point()+theme_bw()+geom_smooth(aes(color=sex, fill=sex))
Two basic image types
Every pixel of a plot contains its own separate coding; not so great if you want to resize the image
jpeg(filename="example.png", width=, height=)
plot(x,y)
dev.off()
Every element of a plot is encoded with a function that gives its coding conditional on several factors; great for resizing
pdf(filename="example.pdf", width=, height=)
plot(x,y)
dev.off()
# Assume we saved our plot is an object called example.plot
ggsave(filename="example.pdf", plot=example.plot, scale=, width=, height=)